// 对只有0/1的数组排序
// 采用快排思想 选取主元 为0或1都行
#include <stdio.h>
#include <stdlib.h>

void b_sort(int a[], int n)
{
    int i, j;
    i = 0;
    j = 0;
    while (j < n && i < n)
    {
        while (a[i] == 0)
            i++;
        while (a[j] == 1)
            j++;
        if (i < j)
        {
            // 防止溢出 全为 1的数组 j会一直到增长到n
            if (j < n)
            {
                int t = a[i];
                a[i] = a[j];
                a[j] = t;
                i++, j++;
            }
        }
        else
        {
            j = i;
        }
    }
}

int main()
{
    /*******************code*******************/
    int a[] = {0, 1, 0, 1};
    int n = 4;
    b_sort(a, n);
    for (int i = 0; i < n; i++)
    {
        printf("%3d", a[i]);
    }
    /******************************************/
    printf("\n\n****************************\n");
    printf("Press Enter key to continue\n");
    getchar();
    return 0;
    /******************************************/
}
